#define _CRT_SECURE_NO_WARNINGS
#include"Stack.h"
void STInit(ST* ps) {
	assert(ps);

	ps->a = NULL;
	ps->capcity = ps->top = 0;
}
void STDestory(ST* ps) {
	assert(ps);

	free(ps->a);
	ps->a = NULL;
	ps->capcity = ps->top = 0;
}
void STPush(ST* ps, STDataType x) {
	assert(ps);

	STDataType* tmp = NULL;
	if (ps->top == ps->capcity) {
		ps->capcity = ps->capcity == 0 ? 4 : ps->capcity * 2;
		tmp = (STDataType*)realloc(ps->a,ps->capcity*sizeof(STDataType));
		if (tmp == NULL) {
			perror("realloc fail");
			return;
		}
		ps->a = tmp;
	}
	ps->a[ps->top] = x;
	ps->top++;
}
void STPop(ST* ps) {
	assert(ps);
	assert(!STEmpty(ps));

	ps->top--;
}
STDataType STTop(ST* ps) {
	assert(ps);
	assert(!STEmpty(ps));

	return ps->a[ps->top - 1];
}
int STsize(ST* ps) {
	assert(ps);

	return ps->top;
}
bool STEmpty(ST* ps) {
	assert(ps);

	return ps->top == 0;
}
